【Org-mode】クリップボードの画像をお手軽にインライン表示する #Emacs
Org-mode は Emacs のメジャーモードの 1つです。
強力なアウトライナーで、タスク管理や、表計算も可能です。 各種形式(html, md, pdf, …) へのエクスポート、文芸的プログラミングなども … 一言でいうと 何でもできるツール です。
今回は クリップボード保存した画像を Org文書に貼り付け + インライン表示する 機能を実装してみます。
▲スクショを取って、さくっと Org文書に貼り付け表示
目次
実行環境
- OS: macOS Mojave
- Emacs: version 26.2
- Org-mode: version 9.1.9
背景
本題に入る前に少し語ります。
普段私は 案件推進を Org-mode で行っています(もちろんブログ執筆も) 。 Org-modeの強力なアウトライン機能で、案件の全ての情報を 1buffer/1画面 に収めることができます。
- 構成図
- パラメータシート
- 構築作業の手順書
- Backlogなど 各プロジェクト/課題へのリンク
- 他 参考ドキュメントへのリンク
…などを 1buffer に集約します。
▲ 100行以上の情報を集約。とても捗る
さて、上の構成図にあるとおり、 Org-mode は 画像のインライン表示 が可能です。
インライン表示の方法 (スクリーンショットの場合) は下記の通り。
- スクリーンショットを取って保存する:
sample.png
- 画像のフルパスを知る:
/Users/SAMPLE/sample.png
- Org-文書内に 角括弧 × 2 でフルパスを囲う:
[[/Users/SAMPLE/sample.png]]
- コマンドを実行する:
org-toggle-inline-images(C-c C-x C-v)
もしくはorg-display-inline-images
- 画像表示!
しかしこの手順、 面倒くさい です。
macOSのコマンド( command + shift + crtl + 4
) や他 Monosnap といったツールは
スクリーンショットをクリップボードに保存できます。
Slack やTwitterなどの投稿欄でそれをペーストすると画像投稿できます。これ、便利ですよね。
Org-modeでこれを実現したい!、というのがモチベーションです。
- スクリーンショットを取る
- コマンド実行する:
xxx
- 画像表示!
手順
調べるとすでに同じような内容の実装が出てきます。
UNIXの import
コマンドを使ってスクリーンショットを取得、
その後 org-buffer と同じディレクトリに自動生成された名前で画像を保存し、インライン表示処理を行う
… といった内容です。
この情報をベースにして、macOS版実装 + 微修正 を行っていきます。
pngpaste のインストール
pngpaste という便利なツールがあったので、これを import
コマンドの代替として使います。
クリップボードに画像が保存されている状態で pngpaste hoge.png
といった感じで画像保存できます。
Homebrew でインストールします。
brew install pngpaste
init.el 追記 (関数)
関数を書きます。 8行目の文字列には 画像を保存したいディレクトリパスを指定します。
(defun my-org-screenshot () "Save a clipboard's screenshot into a time stamped unique-named file in a specified directory and insert a link to this file." (interactive) (setq filename (concat (make-temp-name (concat "/Users/kawahara.masahiro/org/img/" (buffer-name) "_" (format-time-string "%Y%m%d_%H%M%S_")) ) ".png")) (call-process "pngpaste" nil nil nil filename) (insert (concat "[[" filename "]]")) (org-display-inline-images))
init.el 追記 (キーバインド)
関数 my-org-screenshot
のキーバインド設定を書きます。
各々 好きなキーバインドにしましょう。
(global-set-key (kbd "C-c C-x C-^") 'my-org-screenshot)
おわりに
- スクリーンショットを取得 (クリップボードにコピー)
- 貼り付けたい場所で関数実行
- 画像表示!
ができるようになりました。
▲再掲
画像は指定したディレクトリにどんどん溜まっていきます。適宜整理整頓しましょう。
快適な Org-mode 生活を!